/**
 * 路由鉴权
 */
import router from '@/router' // 引入我们的路由
import NProgress from 'nprogress' // 进度条组价
import 'nprogress/nprogress.css' // 进度条样式
import useUserStore from './stores/modules/user'
import pinia from '@/stores/index'
// 路由守卫配置代码
NProgress.configure({ showSpinner: false }) // 关闭进度环
const userStore = useUserStore(pinia)
/**
 * 全局前置守卫
 */
router.beforeEach(async (to: any, from: any, next: any) => {
  document.title = '后台管理系统' + (to.meta.title ? '-' + to.meta.title : '')
  NProgress.start() // 开启进度条
  //获取cookie
  //console.log(getCookie('X-Token'))
  const userId = userStore.userId
  //判断是否有token
  if (getCookie('X-Token')) {
    //已经登录成功，不能访问登录页
    if (to.path == '/login') {
      //发请求再次获取用户信息
      next('/') //跳转到首页
      NProgress.done() // 关闭进度条
    } else {
      //这里主要是判断用户是否已经获取了用户信息，如果获取了，则直接放行，如果没有获取，则发请求获取用户信息，避免切换一次路由就重复发获取用户信息的请求
      if (userId) {
        next()
      } else {
        try {
          await userStore.getUserInfo()
          //获取用户信息成功，放行
          next({ ...to, replace: true })
        } catch (e) {
          // 如果获取用户信息失败，可能是token无效，重定向到登录页
          userStore.clearInfo()
          next('/login')
        }
      }
    }
  } else {
    //没有token，没有登录成功，不能访问其他页面，只能访问登录页
    if ('/login' == to.path) {
      next()
    } else {
      next('/login')
      NProgress.done() // 关闭进度条
    }
  }
})

/**
 * 全局后置守卫
 */
router.afterEach((to: any, from: any) => {
  NProgress.done() // 关闭进度条
})
/**
 * 获取指定的cookie
 * @param name
 * @returns
 */
function getCookie(name: string) {
  const matches = document.cookie.match(new RegExp('(?:^|; )' + name.replace(/([.$?*|{}\\/+^])/g, '\\$1') + '=([^;]*)'))
  return matches ? decodeURIComponent(matches[1]) : undefined
}

export default router
